package powerdev.dao;

import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;

import powerdev.excepcion.DAOExcepcion;
import powerdev.modelo.Evento;
import powerdev.util.ConexionBD;

public class EventoDAO extends BaseDAO {
	
	public Collection<Evento> buscarPorEvento(String txEvento) throws DAOExcepcion {
		System.out.println("EventoDAO: buscarPorDocumento(String noPremio, String txEvento)");
		String query = "SELECT co_Evento, no_Premio, tx_Evento, qt_LimiteEquipo, fe_PlazoInscripcion, fl_Estado FROM Evento WHERE tx_Evento=?";
		Collection<Evento> lista = new ArrayList<Evento>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1, txEvento );
			rs = stmt.executeQuery();
			while (rs.next()) {
				Evento vo = new Evento();
				vo.setCo_Evento(rs.getInt("co_Evento"));
				vo.setNo_Premio(rs.getString("no_Premio"));
				vo.setTx_Evento(rs.getString("tx_Evento"));
				vo.setQt_LimiteEquipo(rs.getInt("qt_LimiteEquipo"));
				vo.setFe_PlazoInscripcion(rs.getDate("fe_PlazoInscripcion"));
				vo.setFl_Estado(rs.getBoolean("fl_Estado"));
				
				lista.add(vo);
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return lista;
	}

	
 public void insertar(Evento vo) throws DAOExcepcion {
		//System.out.println("EventoDAO: insertar(Evento vo)");
		String query = "INSERT INTO Evento(no_Premio, tx_Evento, qt_LimiteEquipo, fe_PlazoInscripcion, fl_Estado, co_Persona) VALUES (?,?,?,?,?,?)";
		
		Connection con = null;
		PreparedStatement stmt = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			//stmt.setInt(1, vo.getCo_Evento());
			stmt.setString(1, vo.getNo_Premio());
			stmt.setString(2, vo.getTx_Evento());
			stmt.setInt(3, vo.getQt_LimiteEquipo());
			stmt.setDate(4, (Date) vo.getFe_PlazoInscripcion());
			stmt.setBoolean(5, vo.getFl_Estado());
			stmt.setInt(6, vo.getCo_Persona());
			
			
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo insertar");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
	}

	public Evento obtener(String noPremio, String txEvento) throws DAOExcepcion {
		System.out.println("EventoDAO: obtener(String noPremio, String txEvento)");
		Evento vo = new Evento();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			String query = "Select co_Evento, no_Premio, tx_Evento, qt_LimiteEquipo, fe_PlazoInscripcion, fl_Estado FROM Evento WHERE no_Premio= ? and tx_Evento=?";
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1, noPremio);
			stmt.setString(2, txEvento);
			rs = stmt.executeQuery();
			if (rs.next()) {
				
				vo.setCo_Evento(rs.getInt(1));
				vo.setNo_Premio(rs.getString(2));
				vo.setTx_Evento(rs.getString(3));
				vo.setQt_LimiteEquipo(rs.getInt(4));
				vo.setFe_PlazoInscripcion(rs.getDate(5));
				vo.setFl_Estado(rs.getBoolean(6));
								
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return vo;
	}

	public void eliminar(String co_Evento) throws DAOExcepcion {
		System.out.println("EventoDAO: eliminar(Int co_Evento)");
		String query = "DELETE FROM Evento WHERE co_Evento=?";
		Connection con = null;
		PreparedStatement stmt = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1, co_Evento);
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo eliminar");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
	}


	public void actualizar(Evento vo) throws DAOExcepcion {
			System.out.println("EventoDAO: actualizar(Evento vo)");
	String query = "update Evento set co_Evento=?, no_Premio=?, tx_Evento=?, qt_LimiteEquipo=?, fe_PlazoInscripcion=?, fl_Estado=?  where co_Evento=?";
	
	Connection con = null;
	PreparedStatement stmt = null;
	try {
		con = ConexionBD.obtenerConexion();
		stmt = con.prepareStatement(query);
		
		stmt.setInt(1, vo.getCo_Evento());
		stmt.setString(2, vo.getNo_Premio());
		stmt.setString(3, vo.getTx_Evento());
		stmt.setInt(5, vo.getQt_LimiteEquipo());
		stmt.setDate(6, (Date) vo.getFe_PlazoInscripcion());
		stmt.setBoolean(4, vo.getFl_Estado());
					
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo actualizar");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
	}
	
	public Collection<Evento> listar() throws DAOExcepcion {
		System.out.println("EventoDAO: listar()");
		Collection<Evento> c = new ArrayList<Evento>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			String query = "SELECT co_Evento, no_Premio, tx_Evento, qt_LimiteEquipo, fe_PlazoInscripcion, fl_Estado from Evento";
			stmt = con.prepareStatement(query);
			rs = stmt.executeQuery();
			while (rs.next()) {
				Evento vo = new Evento();
				
				vo.setCo_Evento(rs.getInt("co_Evento"));
				vo.setNo_Premio(rs.getString("no_Premio"));
				vo.setTx_Evento(rs.getString("tx_Evento"));
				vo.setQt_LimiteEquipo(rs.getInt("qt_LimiteEquipo"));
				vo.setFe_PlazoInscripcion(rs.getDate("fe_PlazoInscripcion"));
				vo.setFl_Estado(rs.getBoolean("fl_Estado"));
								
				c.add(vo);
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return c;
	}

	
	
	
	

}
